/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package gcs.modelo;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 *
 * @author Rafe
 */
public class ParticipanteCategoria {
    
    public List<Combate> listadoCombatesAnteriores = new ArrayList<Combate>();
    public Combate combateActual;
    
    public ParticipanteCampeonato pcamp;
    public Categoria cat;
    public Puntuacion puntuacion = new Puntuacion();
    public int posicion = 0;
    public int resistencia = 0;
    
    public ParticipanteCategoria(ParticipanteCampeonato pc, Categoria c){
        pcamp = pc;
        cat = c;
    }
    
    public void cerrarRonda(){
        //@TODO actualitzar puntuació a la base de dades
        listadoCombatesAnteriores.add(combateActual);
        combateActual = null;
    }
    
    public void actualizarResistenciaOponentes(){
        if(combateActual.participante1.equals(this)){
            if(combateActual.participante2!=null){
                puntuacion.resistenciaOponentes+=combateActual.participante2.resistencia;
            }else{
                puntuacion.resistenciaOponentes+=combateActual.participante1.resistencia;
            }
        }
    }
    
    public void actualizarPuntuacion(){
        if (combateActual != null) {
            if (combateActual.participante1.equals(this)) {
                if (combateActual.participante2 == null) {
                    puntuacion.puntos += 3;
                } else if (combateActual.golpesParticipante1 > combateActual.golpesParticipante2) {
                        puntuacion.puntos += 3;
                }
                puntuacion.golpesAFavor += combateActual.golpesParticipante1;
                puntuacion.golpesEnContra += combateActual.golpesParticipante2;
                resistencia += combateActual.golpesParticipante1;
            } else {
                if (combateActual.golpesParticipante2 > combateActual.golpesParticipante1) {
                    puntuacion.puntos += 3;
                }
                puntuacion.golpesAFavor += combateActual.golpesParticipante2;
                puntuacion.golpesEnContra += combateActual.golpesParticipante1;
                resistencia += combateActual.golpesParticipante2;
            }
        }
    }

    @Override
    public boolean equals(Object obj) {
        boolean isEqual = false;
        if(obj instanceof ParticipanteCategoria){
            isEqual = pcamp.identificador.equals(((ParticipanteCategoria) obj).pcamp.identificador);
        }
        return isEqual;
    }

    @Override
    public int hashCode() {
        int hash = 3;
        return hash;
    }

    @Override
    public String toString() {
        return "id="+pcamp.identificador+"\t"+pcamp.nombre+"\t"+ pcamp.apellidos;
    }
    
    public boolean haCombatidoCon(ParticipanteCategoria p){
        boolean resultado = false;
        
        Iterator<Combate> i = listadoCombatesAnteriores.iterator();
        
        while(i.hasNext() && resultado == false){
            Combate c = i.next();
            if (c.participante1.equals(p)){
                resultado = true;
            }else{
                if(c.participante2!=null){
                    if(c.participante2.equals(p)){
                        resultado = true;
                    }
                }
            }
        }
        
        return resultado;
    }
    
    
    
}
